package com.freeter.modules.gjs.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;

/**
 * 密码工具类
 * 用于生成和验证令牌的哈希值，替代 Node.js 中的 bcrypt
 */
public class PasswordUtil {
    
    private static final SecureRandom RANDOM = new SecureRandom();
    
    /**
     * 生成随机令牌
     * 替代 Node.js 中的 crypto.randomBytes(64).toString('hex')
     */
    public static String generateRandomToken() {
        byte[] bytes = new byte[64];
        RANDOM.nextBytes(bytes);
        return bytesToHex(bytes);
    }
    
    /**
     * 生成令牌的哈希值
     * 替代 Node.js 中的 bcrypt.hashSync(token, 5)
     */
    public static String hashToken(String token) {
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] hash = digest.digest(token.getBytes());
            return Base64.getEncoder().encodeToString(hash);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("SHA-256 algorithm not available", e);
        }
    }
    
    /**
     * 验证令牌
     * 替代 Node.js 中的 bcrypt.compareSync(token, hash)
     */
    public static boolean verifyToken(String token, String hash) {
        String tokenHash = hashToken(token);
        return tokenHash.equals(hash);
    }
    
    /**
     * 将字节数组转换为十六进制字符串
     */
    private static String bytesToHex(byte[] bytes) {
        StringBuilder result = new StringBuilder();
        for (byte b : bytes) {
            result.append(String.format("%02x", b));
        }
        return result.toString();
    }
} 